package org.batallademusica.dominio;

import java.io.Serializable;
import java.lang.String;
import java.util.List;

import javax.persistence.*;

import org.batallademusica.dao.DAOFactory;
import org.batallademusica.dao.DAOImplementations;
import org.batallademusica.dao.EntityManagerFactorySingleton;

import com.movired.utiles.llavesPrimarias.Identificable;
import com.movired.utiles.llavesPrimarias.LlavePrimaria;

import static javax.persistence.GenerationType.IDENTITY;
import org.eclipse.persistence.annotations.Mutable;

/**
 * Entity implementation class for Entity: Cancion
 *
 */

@NamedQueries({
	@NamedQuery(name="Cancion.borrarPorPK",
	query="DELETE FROM Cancion c WHERE c.pk = :pk"),
})
@Entity
@IdClass(CancionPK.class)
public class Cancion implements Serializable, Identificable {

	private static final long serialVersionUID = 1L;
	
	@Id
	@GeneratedValue(strategy = IDENTITY)
	private Long pk;
	private String autor;
	private String titulo;
	private String disco;
	private String anio;
	private Integer segundos;
	private String canales;
	private long bitRate;
	private int frecuencia;
	
	public String getAnio() {
		return anio;
	}

	public void setAnio(String anio) {
		this.anio = anio;
	}

	public Integer getSegundos() {
		return segundos;
	}

	public void setSegundos(Integer segundos) {
		this.segundos = segundos;
	}

	public String getCanales() {
		return canales;
	}

	public void setCanales(String canales) {
		this.canales = canales;
	}

	public long getBitRate() {
		return bitRate;
	}

	public void setBitRate(long bitRate) {
		this.bitRate = bitRate;
	}

	public int getFrecuencia() {
		return frecuencia;
	}

	public void setFrecuencia(int frecuencia) {
		this.frecuencia = frecuencia;
	}

	public Cancion() {
	}  
	
	public CancionPK getPk() {
		return new CancionPK(this.pk);
	}
	
	public String getDisco() {
		return disco;
	}
	public void setDisco(String disco) {
		this.disco = disco;
	}

	public String getAutor() {
		return this.autor;
	}

	public void setAutor(String autor) {
		this.autor = autor;
	}   
	public String getTitulo() {
		return this.titulo;
	}

	public void setTitulo(String titulo) {
		this.titulo = titulo;
	}
    
    public static Cancion buscarPorClave(LlavePrimaria cancionpk){
    	return DAOFactory.getInstance(DAOImplementations.JPA).getCancionDAO().buscarPorPK(cancionpk);
    }

	@Override
	public LlavePrimaria getPK() {
		return new CancionPK(this.pk);
	}
	
	public boolean equals(Object obj){
		if(obj instanceof Cancion) return ((Cancion)obj).getPk().equals(this.getPk());
		return false;
	}
	public int hashCode(){
		return this.getPk().hashCode();
	}
}
